package com.tdam2013.grupo08.widget;

import java.util.Date;

import android.app.PendingIntent;
import android.app.ProgressDialog;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.preference.PreferenceManager;
import android.widget.RemoteViews;

import com.tdam2013.grupo08.R;
import com.tdam2013.grupo08.activities.MainActivity;
import com.tdam2013.grupo08.data.DataBaseHelper;
import com.tdam2013.grupo08.helpers.ContactoHelper;
import com.tdam2013.grupo08.models.MensajeWeb;
import com.tdam2013.grupo08.network.MessageSenderService;

public class MyWidgetProvider extends AppWidgetProvider {
	
	RecibirMensajesAsyncTask recibirMensajesTask;
	Context currentContext;
	RemoteViews currentRemoteView;
	
	@Override
	public void onUpdate(Context context, AppWidgetManager appWidgetManager,
			int[] appWidgetIds) {

		// initializing widget layout
		currentRemoteView = new RemoteViews(context.getPackageName(), R.layout.widget_layout);

		// register for button event
		currentRemoteView.setOnClickPendingIntent(R.id.sync_button,
				buildButtonPendingIntent(context));

		// register for button event
		currentRemoteView.setOnClickPendingIntent(R.id.contentContainer,
				contenedorPendingIntent(context));

		// updating view with initial data
		currentRemoteView.setTextViewText(R.id.desc, "");

		// ---------------------------------
		currentContext = context;
		
		SharedPreferences myPreferences = PreferenceManager.getDefaultSharedPreferences(context);
		

		String userName = myPreferences.getString("userName", "");
		String pass = myPreferences.getString("userPass", "");

		if (userName.compareTo("")==0) {
			currentRemoteView.setTextViewText(R.id.desc, "Sin usuario!!");
			// request for widget update
    		pushWidgetUpdate(currentContext, currentRemoteView);
    		
		} else {

			//recibo mensajes
			recibirMensajesTask = new RecibirMensajesAsyncTask();
			recibirMensajesTask.execute(userName, pass);
		}
	}

	public static PendingIntent buildButtonPendingIntent(Context context) {

		// initiate widget update request
		Intent intent = new Intent();
		intent.setAction(WidgetUtils.WIDGET_UPDATE_ACTION);
		return PendingIntent.getBroadcast(context, 0, intent,
				PendingIntent.FLAG_UPDATE_CURRENT);
	}

	public static PendingIntent contenedorPendingIntent(Context context) {

		Intent intent2 = new Intent(context, MainActivity.class);
		PendingIntent pendingIntent2 = PendingIntent.getActivity(context, 0, intent2, PendingIntent.FLAG_UPDATE_CURRENT);
		return pendingIntent2;

	}


	public static void pushWidgetUpdate(Context context, RemoteViews remoteViews) {
		ComponentName myWidget = new ComponentName(context,
				MyWidgetProvider.class);
		AppWidgetManager manager = AppWidgetManager.getInstance(context);
		manager.updateAppWidget(myWidget, remoteViews);
	}
	
	protected class RecibirMensajesAsyncTask extends AsyncTask<String, Integer, Boolean>
    {
		String nombreUsuario;
    	String passUsuario;
    	
    	@Override
		protected Boolean doInBackground(String... params) 
		{
    		nombreUsuario = params[0];
    		passUsuario = params[1];
    		
			return MessageSenderService.hayNuevosMensajes(new Date(), nombreUsuario, passUsuario, currentContext);
		}
    	
    	@Override
        protected void onPostExecute(Boolean result)
        {
            super.onPostExecute(result);
            
            if (result) {
            	
            	DataBaseHelper bd=new DataBaseHelper(currentContext);
				MensajeWeb msj =bd.obtenerUltimoMensajeParaWidget(nombreUsuario);
				
				msj.setContacto(ContactoHelper.loadContacto(currentContext.getContentResolver(), msj.getContactoId(), currentContext));
				String nombreContacto = msj.getContacto().getNombre() + " (" + msj.getContacto().getNombreUsuarioWeb() + ")";
			
				currentRemoteView.setTextViewText(R.id.desc, nombreContacto+": "+msj.getMensaje());

			} else {
				currentRemoteView.setTextViewText(R.id.desc, "No hay mensajes nuevos.");
			}
            
    		// request for widget update
    		pushWidgetUpdate(currentContext, currentRemoteView);
        };
    }
}
